package com.googlecode.derby.customize;

import java.util.List;

/**
 * データを抽出・登録・更新・削除などの基本動作のみを行うインターフェース.
 *
 * @author o.tanaka
 * @version 2009/12/11
 */
public interface DataControllable {

    /**
     * commit.
     */
    void commit();

    /**
     * @param aList data class
     * @return DataControllable
     */
    DataControllable delete(List<?> aList);

    /**
     * close.
     */
    void disConnection();

    /**
     * @return update count.
     */
    long getExecuteUpdateCnt();

    /**
     * @return List<ResultData>
     */
    List<ResultData> getResultDatas();

    /**
     * @param maxCount
     *            最大件数
     * @return DbInfo
     */
    List<ResultData> getResultDatas(final long maxCount);

    /**
     * @param bgnRownum
     *            開始件数
     * @param endRownum
     *            終了件数
     * @return DbInfo
     */
    List<ResultData> getResultDatas(
            final long bgnRownum,
            final long endRownum);

    /**
     * @param aList
     *            data class
     * @return DataControllable
     */
    DataControllable insertUpdate(List<?> aList);

    /**
     * @param aList
     *            data class
     * @param aNotOverride
     *            DbConst.NOT_OVERRIDE
     * @return DataControllable
     */
    DataControllable insertUpdate(List<?> aList, String aNotOverride);

    /**
     * @return create table is true.
     */
    boolean isCreateTable();

    /**
     * @param aColumn
     *            column
     * @return DataControllable
     */
    DataControllable orderby(String aColumn);

    /**
     * roll backメソッド.
     */
    void rollback();

    /**
     * @param aClass
     *            Table class
     * @return DataControllable
     */
    DataControllable select(Class<?> aClass);

    /**
     * @param aClass
     *            Table class
     * @param aObject
     *            bind data
     * @return DataControllable
     */
    DataControllable select(Class<?> aClass, Object aObject);

    /**
     * @param aObject
     *            bind data
     * @return DataControllable
     */
    DataControllable select(Object aObject);

    /**
     * @param aClass
     *            EntityClass[]
     * @return DataControllable
     */
    DataControllable selectTables(
            Class<?>... aClass);

    /**
     * Connectionトランザクションメソッド.<br/>
     * setAutoCommit(false);<--明示的にコミットをしなければ、コミットされない<br/>
     * setAutoCommit(true);<--execute毎に、コミットされる<br/>
     *
     * @param b
     *            "false"または"true"をセット
     * @return DataControllable
     */
    DataControllable setAutoCommit(final boolean b);

    /**
     * Connection読取専用メソッド.<br/>
     * setReadOnly(false);<--読取専用ではない<br/>
     * setReadOnly(true);<--読取専用<br/>
     *
     * @param b
     *            "false"または"true"をセット
     */
    void setReadOnly(boolean b);

    /**
     * @param aClass
     *            Table class
     * @return DataControllable
     */
    DataControllable table(Class<?> aClass);

    /**
     * @param aSql
     *            sql
     * @param aObjects
     *            data class
     * @return DataControllable
     */
    DataControllable where(String aSql, Object... aObjects);

}
